# -*- coding: utf-8 -*-

import time
from concurrent.futures import ProcessPoolExecutor
from concurrent.futures.thread import ThreadPoolExecutor

# 求素数
# 6: 2 3 4 5
# 7: 2 3 4 5 6
# 判断是否是素数 除了1 和他本身其他不能被整除 就是素数
def is_prime(n):
    if n <= 1:
        return False

    # 检查2到n的平方根之间的数
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False

    # 没有找到任何可以整除的数，是素数
    return True

# 创建一个列表， 包含相同的大数， 用于测试性能
is_number = [62151315315313153] * 10
# print(is_number)

# 单线程完成
def single_thread():
    for number in is_number:
        # 判断列表里面的数是否为素数
        is_prime(number)


# 多线程完成
def multi_thread():
    with ThreadPoolExecutor() as pool:
        pool.map(is_prime, is_number)


# 多进程完成
def multi_process():
    with ProcessPoolExecutor() as pool:
        pool.map(is_prime, is_number)

if __name__ == '__main__':
    # 测试单线程完成的时间
    start = time.time()
    single_thread()
    end = time.time()
    print(f'单线程执行所花费的时间{end - start}')

    # 测试多线程完成的时间
    start = time.time()
    multi_thread()
    end = time.time()
    print(f'多线程执行所花费的时间{end - start}')

    # 测试多进程完成的时间
    start = time.time()
    multi_process()
    end = time.time()
    print(f'多进程执行所花费的时间{end - start}')
